package gui

import (
	"time"

	"github.com/andlabs/ui"
)

//诸如control，不能暴露在全局，只能局部，否则莫名报错。
//因为ui.Main是一个goroutine，不同的goroutine通信参照print_time方法。
//var textArea1 ui.MultilineEntry

func Show() {
	textArea1 := ui.NewMultilineEntry()
	textArea1.SetReadOnly(true)
	group1 := ui.NewGroup("source")
	group1.SetMargined(true)
	group1.SetChild(textArea1)

	textArea2 := ui.NewMultilineEntry()
	textArea2.SetReadOnly(true)
	group2 := ui.NewGroup("target")
	group2.SetMargined(true)
	group2.SetChild(textArea2)

	//button := ui.NewButton("start")

	time_ctrl := ui.NewLabel("")

	consoleCtrl := ui.NewMultilineEntry()
	consoleCtrl.SetReadOnly(true)
	console_g := ui.NewGroup("console")
	console_g.SetMargined(true)
	console_g.SetChild(consoleCtrl)

	window := ui.NewWindow("[complete]", 1000, 400, false)
	v_box0 := ui.NewVerticalBox()
	v_box0.SetPadded(true)
	window.SetChild(v_box0)

	v_box0.Append(time_ctrl, false)
	h_box := ui.NewHorizontalBox()
	h_box.SetPadded(true)
	v_box0.Append(h_box, true)
	v_box0.Append(console_g, true)

	v_box1 := ui.NewVerticalBox()
	h_box.Append(v_box1, true)
	h_box.Append(ui.NewHorizontalSeparator(), false)
	v_box2 := ui.NewVerticalBox()
	h_box.Append(v_box2, true)

	v_box1.Append(group1, true)
	v_box2.Append(group2, true)

	window.OnClosing(func(*ui.Window) bool {
		ui.Quit()
		return true
	})
	window.Show()


	go print_time(time_ctrl)
	go walk("D:\\Documents\\Fiddler2", consoleCtrl, chanSrc)
	go walk("D:\\Documents\\Fiddler1", consoleCtrl, chanTrg)
	go compare(<-chanSrc, <-chanTrg, consoleCtrl, textArea1, textArea2)

}

func print_time(label *ui.Label) {
	for {
		time.Sleep(time.Second)
		ui.QueueMain(func() {
			label.SetText(time.Now().Format("2006-01-02 15:04:05"))
		})
	}
}
